// 订阅消息管理工具
const config = require('./config.js')

/**
 * 从后端获取所有已配置的订阅消息模板ID
 */
async function getTemplateIds() {
    return new Promise((resolve, reject) => {
        wx.request({
            url: `${config.apiBaseUrl}/wechat/template-ids`,
            method: 'GET',
            success: (res) => {
                if (res.statusCode === 200 && res.data.code === 0 && res.data.data) {
                    resolve(res.data.data)
                } else {
                    console.error('获取模板ID失败:', res.data)
                    resolve(null)
                }
            },
            fail: (err) => {
                console.error('获取模板ID网络异常:', err)
                resolve(null)
            }
        })
    })
}

/**
 * 请求订阅所有已配置的模板
 * @param {Array} specificTemplates - 可选，只订阅特定的模板（传入模板key数组，如 ['wechat_template_repair_submit']）
 */
async function requestSubscribeAll(specificTemplates = null) {
    try {
        console.log('[订阅] 开始获取模板ID...')
        const templates = await getTemplateIds()

        if (!templates) {
            console.warn('[订阅] 未获取到模板ID配置')
            return false
        }

        console.log('[订阅] 后端返回的模板配置:', templates)

        // 提取所有模板ID值
        let templateIds = []
        if (specificTemplates && Array.isArray(specificTemplates)) {
            // 只订阅指定的模板
            console.log('[订阅] 尝试订阅特定模板:', specificTemplates)
            specificTemplates.forEach(key => {
                if (templates[key]) {
                    templateIds.push(templates[key])
                    console.log(`[订阅] ✓ ${key}: ${templates[key]}`)
                } else {
                    console.log(`[订阅] ✗ ${key}: 未配置`)
                }
            })
        } else {
            // 订阅所有模板
            templateIds = Object.values(templates).filter(v => v && v.trim())
        }

        console.log('[订阅] 最终要订阅的模板ID:', templateIds)

        if (templateIds.length === 0) {
            console.warn('[订阅] 没有可订阅的模板，请在后台配置模板ID')
            return false
        }

        // 请求订阅授权
        console.log('[订阅] 开始请求微信授权弹窗...')
        const result = await wx.requestSubscribeMessage({
            tmplIds: templateIds
        })

        console.log('[订阅] 授权结果:', result)
        return true
    } catch (err) {
        // 用户拒绝或其他错误，不影响业务流程
        console.error('[订阅] 授权异常:', err)
        return false
    }
}

/**
 * 请求报修相关订阅
 */
async function requestRepairSubscribe() {
    // 普通用户只需订阅这三个模板
    return await requestSubscribeAll([
        'wechat_template_repair_submit',
        'wechat_template_repair_accept',
        'wechat_template_repair_complete'
    ])
}

/**
 * 请求管理员通知订阅（仅限管理员使用）
 */
async function requestAdminSubscribe() {
    return await requestSubscribeAll([
        'wechat_template_admin_repair_notify'
    ])
}

/**
 * 请求借用相关的订阅消息
 */
async function requestLoanSubscribe() {
    return await requestSubscribeAll([
        'wechat_template_loan_apply',
        'wechat_template_loan_approve',
        'wechat_template_loan_reminder'
    ])
}

module.exports = {
    getTemplateIds,
    requestSubscribeAll,
    requestRepairSubscribe,
    requestLoanSubscribe,
    requestAdminSubscribe // 导出管理员订阅函数
}
